﻿// mysqlite.h
#ifndef MYSQLITE_H
#define MYSQLITE_H

#include <QThread>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDateTime>
#include <QMutex>
#include <QWaitCondition>
#include <QVariantList>
#include <QSqlError>
#include <QDebug>
#include <QFile>

//数据结构体：对应数据库字段
struct SensorData {
    QDateTime timestamp;  //时间
    double temp1;         //温度1
    double temp2;         //温度2
    double pressure;      //压力
    double flow;          //流量
};

class MySQLite : public QThread
{
    Q_OBJECT
public:
    //操作类型枚举
    enum Operation {
        Op_CreateDB,       //创建数据库
        Op_WriteSingle,    //写入单条数据
        Op_WriteBatch,     //写入多条数据
        Op_None
    };

    explicit MySQLite(QObject *parent = nullptr);
    ~MySQLite();

    //创建数据库
    void createDatabase(const QString &dbName);

    //写入单条数据
    void writeSingleData(const SensorData &data);

    //写入多条数据
    void writeBatchData(const QList<SensorData> &dataList);

signals:
    //数据库创建完成的信号（参数：是否成功，数据库名称）
    void signals_dbCreateFinished(bool success, QString dbName);

    //数据写入完成的信号（可选，用于反馈结果）
    void signals_dataWriteFinished(bool success);

protected:
    //线程执行函数
    void run() override;

private:
    //实际创建数据库和表结构的函数
    bool createDBInternal(const QString &dbName);

    //实际写入单条数据的函数
    bool writeSingleInternal(const SensorData &data);

    //实际写入多条数据的函数
    bool writeBatchInternal(const QList<SensorData> &dataList);

private:
    QMutex m_mutex;               //线程同步锁
    QWaitCondition m_condition;   //线程等待条件
    bool m_stop = false;          //线程停止标志

    //操作参数
    Operation m_currentOp = Op_None;
    QString m_dbName;             //数据库名称
    SensorData m_singleData;      //单条数据缓存
    QList<SensorData> m_batchData;//批量数据缓存

    //数据库对象
    QSqlDatabase m_db;
    QString m_currentDB;          //当前已打开的数据库
};

#endif // MYSQLITE_H
